﻿/**
* @author ZhangHuihua@msn.com
*/
$.setRegional("alertMsg", {
    title: { error: "错误", info: "提示", warn: "警告", correct: "成功", confirm: "确认提示" },
    butMsg: { ok: "确定", yes: "是", no: "否", cancel: "取消" }
});
var alertMsg = {
    _boxId: "#alertMsgBox",
    _bgId: "#alertBackground",
    _closeTimer: null,

    _butsHtmlTemplate: "<li><a class='button' rel='#callback#' onclick='alertMsg.close()' href='javascript:'><span>#butMsg#</span></a></li>",
    _boxHtmlTemplate:"<div id='alertMsgBox' class='alert'><div class='alertContent'><div class='#type#'><div class='alertInner'><h1>#title#</h1><div class='msg'>#message#</div></div><div class='toolBar'><ul>#butFragment#</ul></div></div></div><div class='alertFooter'><div class='alertFooter_r'><div class='alertFooter_c'></div></div></div></div>",

    _types: { error: "error", info: "info", warn: "warn", correct: "correct", confirm: "confirm" },

    _getTitle: function(key) {
        return $.regional.alertMsg.title[key];
    },

    /**
    * 
    * @param {Object} type
    * @param {Object} msg
    * @param {Object} buttons [button1, button2]
    */
    _open: function(type, msg, buttons) {
        $(this._boxId).remove();
        var butsHtml = "";
        if (buttons) {
            for (var i = 0; i < buttons.length; i++) {
                var sRel = buttons[i].call ? "callback" : "";
                butsHtml += this._butsHtmlTemplate.replace("#butMsg#", buttons[i].name).replace("#callback#", sRel);
            }
        }
        var boxHtml = this._boxHtmlTemplate.replace("#type#", type).replace("#title#", this._getTitle(type)).replace("#message#", msg).replace("#butFragment#", butsHtml);
        $(boxHtml).appendTo("body").css({ top: -$(this._boxId).height() + "px" }).animate({ top: "0px" }, 500);

        if (this._closeTimer) {
            clearTimeout(this._closeTimer);
            this._closeTimer = null;
        }
        if (this._types.info == type || this._types.correct == type) {
            this._closeTimer = setTimeout(function() { alertMsg.close() }, 3500);
        } else {
            $(this._bgId).show();
        }
        var jCallButs = $(this._boxId).find("[rel=callback]");
        for (var i = 0; i < buttons.length; i++) {
            if (buttons[i].call) jCallButs.eq(i).click(buttons[i].call);
        }
    },
    close: function() {
        $(this._boxId).animate({ top: -$(this._boxId).height() }, 500, function() {
            $(this).remove();
        });
        $(this._bgId).hide();
    },
    error: function(msg, options) {
        this._alert(this._types.error, msg, options);
    },
    info: function(msg, options) {
        this._alert(this._types.info, msg, options);
    },
    warn: function(msg, options) {
        this._alert(this._types.warn, msg, options);
    },
    correct: function(msg, options) {
        this._alert(this._types.correct, msg, options);
    },
    _alert: function(type, msg, options) {
        var op = { okName: $.regional.alertMsg.butMsg.ok, okCall: null };
        $.extend(op, options);
        var buttons = [
			{ name: op.okName, call: op.okCall }
		];
        this._open(type, msg, buttons);
    },
    /**
    * 
    * @param {Object} msg
    * @param {Object} options {okName, okCal, cancelName, cancelCall}
    */
    confirm: function(msg, options) {
        var op = { okName: $.regional.alertMsg.butMsg.ok, okCall: null, cancelName: $.regional.alertMsg.butMsg.cancel, cancelCall: null };
        $.extend(op, options);
        var buttons = [
			{ name: op.okName, call: op.okCall },
			{ name: op.cancelName, call: op.cancelCall }
		];
        this._open(this._types.confirm, msg, buttons);
    }
};

